<?php

 class Producto_model extends CI_Model {
   
    function __construct(){   
        parent::__construct();
        $this->config->load('database_tables');
        $this->_table = $this->config->item('dbtables');
    }
	
    function getProductos($selects = null, $wheres = null, $empresa = null){
        if($selects != null){
            $this->db->select(implode(",", $selects));
        }
        $this->db->join($this->_table['producto_tipo'], 'producto.pro_idtipo = producto_tipo.pti_idtipo');
        if($wheres != null){
            $this->db->where_in('pro_idproducto', explode(",", $wheres));
        }
        if($empresa != null){
            $this->db->where('pro_empresa', $empresa);
        }
        return $this->db->get($this->_table['producto']);
    }
    
    function buscar($resultados = 10, $pagina = 0){
        $this->load->library('General');
        $entorno = ($this->session->userdata('p_entorno_playa') == 'S' ? 1 : 0);
        $entorno = ($this->session->userdata('p_entorno_ciudad') == 'S' ? 2 : $entorno);
        $entorno = ($this->session->userdata('p_entorno_rural') == 'S' ? 3 : $entorno);
        $entorno = ($this->session->userdata('p_entorno_nieve') == 'S' ? 4 : $entorno);
        
        $diferencia_dias = $this->general->restar_fechas($this->session->userdata('p_datefrom'), $this->session->userdata('p_dateto'));
        $fechades = $this->general->fec_str_to_ymd($this->session->userdata('p_datefrom'), true);
        $fechahas = $this->general->fec_str_to_ymd($this->session->userdata('p_dateto'), true);
        $personas = $this->session->userdata('p_personas');
        $select  = " SELECT *";
        $select .= " FROM ".$this->_table['producto'];
        $select .= " JOIN ".$this->_table['zon_municipio']." ON mun_idmunicipio = pro_municipio";
        $select .= " WHERE 1 = 1";
        if($entorno > 0){
            $select .= " AND pro_entorno = ".$entorno;
        }
        $select .= " AND (pro_numeropersonas >= ".($personas != '' ? $personas : 0)." OR pro_numeropersonas IS NULL)";
        if($this->session->userdata('p_valores_lugares') != ''){
            $select .= " AND pro_provincia IN (".$this->session->userdata('p_valores_lugares').")";
        }
        if($fechades != '' && $fechahas != ''){
            $select .= " AND pro_idproducto NOT IN (SELECT res_idproducto FROM ".$this->_table['reserva'];
            $select .= " WHERE ".$fechades." BETWEEN date_format(res_fechadesde, '%Y%m%d') AND date_format(res_fechahasta, '%Y%m%d')";
            $select .= " OR ".$fechahas." BETWEEN date_format(res_fechadesde, '%Y%m%d') AND date_format(res_fechahasta, '%Y%m%d')";
            $select .= " )";
            $select .= " AND EXISTS (select 1 from ".$this->_table['tarifa'];
            $select .= " WHERE tar_idproducto = pro_idproducto";
            $select .= " AND tar_fecha between date_format(".$fechades.", '%Y%m%d') AND date_format(".$fechahas.", '%Y%m%d')";
            $select .= " AND DATEDIFF(date_format(".$fechahas.", '%Y%m%d'), date_format(".$fechades.", '%Y%m%d')) = ".$diferencia_dias.")";
        }
        $select .= " ORDER BY pro_verificado DESC, pro_comision DESC, pro_valoracion DESC";
        $select .= " LIMIT ".($pagina * $resultados).", ".(($pagina + 1) * $resultados);
        $query = $this->db->query($select);
        return $query;
    }
    
    function buscar_portada($registros = 0){
        $select  = " SELECT *";
        $select .= " FROM ".$this->_table['producto'];
        $select .= " JOIN ".$this->_table['zon_municipio']." ON mun_idmunicipio = pro_municipio";
        $select .= " WHERE 1 = 1";
        $select .= " AND EXISTS (select 1 from ".$this->_table['tarifa'];
        $select .= " WHERE tar_idproducto = pro_idproducto)";
        $select .= " ORDER BY pro_verificado DESC, pro_comision DESC, pro_valoracion DESC";
        $select .= " LIMIT 0,".$registros;
        $query = $this->db->query($select);
        return $query;
    }

    function borrar($parametro = ''){
        $this->db->where_in('pro_idproducto', explode(",", $parametro));
        $this->db->delete($this->_table['producto']);
    }

    function desc(){
        return $this->db->query("DESCRIBE ".$this->_table['producto']);
    }

    function guardar($parametros){
        $this->db->insert($this->_table['producto'], $parametros);
        return $this->db->insert_id();
    }

    function actualizar($parametros){
        $this->db->where('pro_idproducto', $parametros["pro_idproducto"]);
        $this->db->update($this->_table['producto'], $parametros);
    }
    
    function getTipos(){
        $this->db->select('pti_idtipo AS "id", pti_descripcion AS "desc"');
        $this->db->from($this->_table['producto_tipo']);
        return $this->db->get();        
    }
    
    function getEntorno($entorno = null){
        $this->db->select('ent_identorno AS "id", ent_descripcion AS "desc"');
        if($entorno != null){
            $this->db->where('ent_identorno', $entorno);
        }
        $this->db->from($this->_table['entorno']);
        return $this->db->get();        
    }
    
    function getProvincia($provincia = null){
        $this->db->select('prv_idprovincia AS "id", prv_nombre AS "desc"');
        $this->db->from($this->_table['zon_provincia']);
        if($provincia != null){
            $this->db->where('prv_idprovincia', $provincia);
        }
        return $this->db->get();        
    }
    
    function getProvinciaByNom($provincia = null){
        $this->db->select('prv_idprovincia');
        $this->db->from($this->_table['zon_provincia']);
        if($provincia != null){
            $this->db->where('prv_nombre', $provincia);
        }
        $query = $this->db->get();
        if($query->num_rows() > 0){
            $row = $query->row_array();
            return $row['prv_idprovincia'];
        }
        return null;
    }
    
    function getUltimasProvinciasConReserva(){
        $this->db->select('prv_nombre');
        $this->db->from($this->_table['zon_provincia']);
        $this->db->join($this->_table['producto'], 'prv_idprovincia = pro_provincia');
        $this->db->limit(15, 0);
        return $this->db->get();        
    }
    
    function getMunicipio($provincia = '', $municipio = ''){
        if($provincia == '' && $municipio != ''){
            $this->db->select('mun_idprovincia');
            $this->db->from($this->_table['zon_municipio']);
            $this->db->where('mun_idmunicipio', $municipio);
            $query = $this->db->get();
            if($query->num_rows() > 0){
                $row = $query->row_array();
                $provincia = $row['mun_idprovincia'];
            }
        }
        $this->db->select('mun_idmunicipio AS "id", mun_nombre AS "desc"');
        $this->db->from($this->_table['zon_municipio']);
        if($provincia != '' && $municipio != ''){
            $this->db->where('mun_idmunicipio', $municipio);
        }
        $this->db->where('mun_idprovincia', $provincia);
        return $this->db->get();        
    }
    
    function getDistancia($producto = ''){
        $this->db->select('dst_iddistancia AS "id", dst_descripcion AS "desc"');
        $this->db->from($this->_table['distancia']);
        return $this->db->get();        
    }
    
    function getValorDistancia($producto, $distancia){
        $this->db->select('dsp_iddisproducto AS "id", dsp_valor AS "desc"');
        $this->db->from($this->_table['distancia_producto']);
        $this->db->where('dsp_idproducto', $producto);
        $this->db->where('dsp_iddistancia', $distancia);
        return $this->db->get();        
    }
    
    function insertar_distancias($iddistancia = '', $idproducto = '', $valor = ''){
        $this->db->where('dsp_idproducto', $idproducto);
        $this->db->where('dsp_iddistancia', $iddistancia);
        $query = $this->db->get($this->_table['distancia_producto']); 
        if ($query->num_rows() > 0) {
            $this->db->where('dsp_idproducto', $idproducto);
            $this->db->where('dsp_iddistancia', $iddistancia);
            $this->db->update($this->_table['distancia_producto'], array('dsp_valor' => $valor));
        }else{
            $data = array(
                'dsp_iddistancia' => $iddistancia,
                'dsp_idproducto' => $idproducto,
                'dsp_valor' => $valor,
                'dsp_empresa' => $this->session->userdata('empresa'),
                'dsp_feccre' => date("Y-m-d H:i:s"),
                'dsp_usucre' => $this->session->userdata('nombre')
            );

            $this->db->insert($this->_table['distancia_producto'], $data); 
        }
    }
    
    function getDistribucion(){
        $this->db->select('dis_iddistribucion AS "id", dis_nombre AS "desc"');
        $this->db->from($this->_table['distribucion']);
        return $this->db->get();        
    }
    
    function getValorDistribucion($producto, $distribucion){
        $this->db->select('dip_iddisproducto AS "id", dip_valor AS "desc"');
        $this->db->from($this->_table['distribucion_producto']);
        $this->db->where('dip_idproducto', $producto);
        $this->db->where('dip_iddistribucion', $distribucion);
        return $this->db->get();        
    }
    
    function insertar_distribuciones($iddistribucion = '', $idproducto = '', $valor = ''){
        $this->db->where('dip_idproducto', $idproducto);
        $this->db->where('dip_iddistribucion', $iddistribucion);
        $query = $this->db->get($this->_table['distribucion_producto']); 
        if ($query->num_rows() > 0) {
            $this->db->where('dip_idproducto', $idproducto);
            $this->db->where('dip_iddistribucion', $iddistribucion);
            $this->db->update($this->_table['distribucion_producto'], array('dip_valor' => $valor));
        }else{
            $data = array(
                'dip_iddistribucion' => $iddistribucion,
                'dip_idproducto' => $idproducto,
                'dip_valor' => $valor,
                'dip_empresa' => $this->session->userdata('empresa'),
                'dip_feccre' => date("Y-m-d H:i:s"),
                'dip_usucre' => $this->session->userdata('nombre')
            );

            $this->db->insert($this->_table['distribucion_producto'], $data); 
        }
    }
    
    function getDescTipoContenido($tipocontenido){
        $this->db->from($this->_table['contenido_tipo']);
        $this->db->where('cot_idtipocontenido', $tipocontenido);
        $query = $this->db->get();
        if($query->num_rows() > 0){
            $row = $query->row_array();
            return $row['cot_nombre'];
        }
        return null;
    }
    
    function getContenido(){
        $this->db->select('con_idcontenido AS "id", con_nombre AS "desc", con_tipocontenido AS "tipo"');
        $this->db->from($this->_table['contenido']);
        $this->db->order_by('con_tipocontenido');
        return $this->db->get();        
    }
    
    function getValorContenido($producto, $contenido){
        $this->db->select('cop_idconproducto AS "id", cop_valor AS "desc"');
        $this->db->from($this->_table['contenido_producto']);
        $this->db->where('cop_idproducto', $producto);
        $this->db->where('cop_idcontenido', $contenido);
        return $this->db->get();        
    }
    
    function eliminar_contenidos($idproducto = ''){
        $this->db->where('cop_idproducto', $idproducto);
        $this->db->delete($this->_table['contenido_producto']);
    }
    
    function insertar_contenidos($idcontenido = '', $idproducto = '', $valor = ''){
        $data = array(
            'cop_idcontenido' => $idcontenido,
            'cop_idproducto' => $idproducto,
            'cop_valor' => $valor,
            'cop_empresa' => $this->session->userdata('empresa'),
            'cop_feccre' => date("Y-m-d H:i:s"),
            'cop_usucre' => $this->session->userdata('nombre')
        );
        $this->db->insert($this->_table['contenido_producto'], $data); 
    }    
    
    function insertar_fotos($descripcion = '', $url = '', $url_thumb = '', $url_thumb_mini = ''){
        $data = array(
            'fot_descripcion' => $descripcion,
            'fot_url' => $url,
            'fot_url_thumb' => $url_thumb,
            'fot_url_thumb_mini' => $url_thumb_mini,
            'fot_idproducto' => $_POST['pro_idproducto'][0],
            'fot_empresa' => $this->session->userdata('empresa'),
            'fot_feccre' => date("Y-m-d H:i:s"),
            'fot_usucre' => $this->session->userdata('nombre')
        );

        $this->db->insert($this->_table['fotos'], $data);
    }
    
    function getFoto($producto = '', $defecto = ''){
        $this->db->select('fot_idfoto AS "id", fot_descripcion AS "desc", fot_url AS "url", 
            fot_url_thumb AS "url_thumb", fot_url_thumb_mini AS "url_thumb_mini", fot_default AS "default"');
        $this->db->from($this->_table['fotos']);
        if($this->session->userdata('empresa') != null){
            $this->db->where('fot_empresa', $this->session->userdata('empresa'));
        }        
        if($defecto != ''){
            $this->db->where('fot_default', $defecto);
        }
        $this->db->where('fot_idproducto', $producto);
        return $this->db->get();
    }
    
    function marcarFoto(){
        $this->db->where('fot_idproducto', $this->input->post('p_idproducto'));
        $this->db->update($this->_table['fotos'], array('fot_default' => 'N'));        
        $this->db->where('fot_idfoto', $this->input->post('p_idfoto'));
        $this->db->update($this->_table['fotos'], array('fot_default' => 'S'));
    }
    
    function eliminar_foto(){
        $filename = "";
        $this->db->where('fot_idfoto', $this->input->post('p_idfoto'));
        $query = $this->db->get($this->_table['fotos']);
        if($query->num_rows() > 0){
            $row = $query->row_array();
            $filename = substr(strrchr($row['fot_url'], "/"), 1);
        }
        
        $this->db->where('fot_idproducto', $this->input->post('p_idproducto'));
        $this->db->where('fot_idfoto', $this->input->post('p_idfoto'));
        $this->db->delete($this->_table['fotos']);
        
        return $filename;
    }
    
    function getReservasJson($producto = '', $mes = ''){
        $query = $this->db->query("select res_idreserva, DATE_FORMAT(res_fechadesde, '%Y-%m-%d' ) as 'fdesde', DATE_FORMAT(res_fechahasta, '%Y-%m-%d' ) as 'fhasta',
            res_nombrecliente, res_observaciones, res_reservacierre
            from ".$this->_table['reserva']." where res_empresa = ". $this->session->userdata('empresa')." and res_idproducto = ".$producto);
        $res = array();
        if($query->num_rows() > 0){
            foreach ($query->result_array() as $key => $value){
                $detalle = array();
                $detalle['id'] = $value['res_idreserva'];
                $detalle['start'] = $value['fdesde'];
                $detalle['end'] = $value['fhasta'];
                $detalle['title'] = $value['res_nombrecliente'];
                $detalle['allDay'] = true;
                $detalle['description'] = $value['res_observaciones'];
                if($value['res_reservacierre'] == 'C'){
                    $detalle['color'] = '#ff6666';
                    $jscript  = "javascript: ";
                    $jscript .= "setValuesStopSales('".$value['res_idreserva']."');";
                    $detalle['url'] = $jscript;
                }else{
                    $detalle['color'] = '#66cc66';
                    $detalle['url'] = site_url().'reserva/ver/'.$value['res_idreserva'];
                }
                $res[] = $detalle;
            }
        }
        
        return $res;
    }  
    
    function getTarifasJson($producto = '', $mes = ''){
        $this->db->from($this->_table['tarifa']);
        $this->db->where('tar_empresa', $this->session->userdata('empresa'));
        $this->db->where('tar_idproducto', $producto);
        //$this->db->where('Month( tar_fecha ) = ', ($mes != '' ? $mes : date('m')));
        $query = $this->db->get();
        $res = array();
        if($query->num_rows() > 0){
            foreach ($query->result_array() as $key => $value){
                $detalle = array();
                $ano = substr($value['tar_fecha'], 0, 4);
                $mes = substr($value['tar_fecha'], 5, 2);
                $dia = substr($value['tar_fecha'], 8, 2);
                $detalle['ano'] = $ano;
                $detalle['mes'] = $mes-1;
                $detalle['dia'] = $dia;
                $detalle['importe'] = $value['tar_importe']."€";
                $res[] = $detalle;                
            }
        }
        return $res;
    }
    
    function agregar_tarifas($producto = '', $dia = '', $importe = ''){
        $this->db->from($this->_table['tarifa']);
        $this->db->where('tar_empresa', $this->session->userdata('empresa'));
        $this->db->where('tar_idproducto', $producto);
        $this->db->where('tar_fecha', $dia);
        $query = $this->db->get();
        if($query->num_rows() > 0){
            $row = $query->row_array();
            $this->db->where('tar_idtarifa', $row['tar_idtarifa']);
            $this->db->update($this->_table['tarifa'], array('tar_importe' => $importe));
        }else{
            $data = array(
                'tar_fecha' => $dia,
                'tar_importe' => $importe,
                'tar_idproducto' => $producto,
                'tar_empresa' => $this->session->userdata('empresa'),
                'tar_feccre' => date("Y-m-d H:i:s"),
                'tar_usucre' => $this->session->userdata('nombre')
            );            
            $this->db->insert($this->_table['tarifa'], $data);           
        }
    }
    
    function agregar_cierres($producto = '', $fechadesde = '', $fechahasta = ''){
        $query = $this->db->query("SELECT * FROM (".$this->_table['reserva'].") 
            WHERE `res_empresa` = ".$this->session->userdata('empresa')."
            AND `res_idproducto` = ".$producto."
            AND ".$fechadesde." BETWEEN date_format(res_fechadesde, '%Y%m%d') AND date_format(res_fechahasta, '%Y%m%d') 
            OR ".$fechahasta." BETWEEN date_format(res_fechadesde, '%Y%m%d') AND date_format(res_fechahasta, '%Y%m%d')");
        if($query->num_rows() > 0){
            return false;
        }else{
            $data = array(
                'res_fechadesde' => $fechadesde,
                'res_fechahasta' => $fechahasta,
                'res_nombrecliente' => lang('cerrado'),
                'res_emailcliente' => lang('cerrado'),
                'res_idproducto' => $producto,
                'res_reservacierre' => 'C',
                'res_empresa' => $this->session->userdata('empresa'),
                'res_feccre' => date("Y-m-d H:i:s"),
                'res_usucre' => $this->session->userdata('nombre')
            );
            $this->db->insert($this->_table['reserva'], $data);
            return true;
        }
    }
    
    function eliminar_cierres($idcierre = ''){
        $this->db->where('res_idreserva', $idcierre);
        $this->db->where('res_empresa', $this->session->userdata('empresa'));
        $this->db->delete($this->_table['reserva']);
    }
    
    function agregar_confirmaciones($producto = '', $dia = ''){
        $this->db->from($this->_table['tarifa']);
        $this->db->where('tar_empresa', $this->session->userdata('empresa'));
        $this->db->where('tar_idproducto', $producto);
        $this->db->where('tar_fecha', $dia);
        $query = $this->db->get();
        if($query->num_rows() > 0){
            $row = $query->row_array();
            $this->db->where('tar_idtarifa', $row['tar_idtarifa']);
            $this->db->update($this->_table['tarifa'], array('tar_confirmarreserva' => 'S'));
        }else{
            $data = array(
                'tar_fecha' => $dia,
                'tar_confirmarreserva' => 'S',
                'tar_idproducto' => $producto,
                'tar_empresa' => $this->session->userdata('empresa'),
                'tar_feccre' => date("Y-m-d H:i:s"),
                'tar_usucre' => $this->session->userdata('nombre')
            );            
            $this->db->insert($this->_table['tarifa'], $data);           
        }
    }
    
    function get_comentarios($producto = '', $origen = ''){
        $this->db->where('com_origen', $origen);
        if($this->session->userdata('empresa') != null){
            $this->db->where('com_empresa', $this->session->userdata('empresa'));
        }
        $this->db->where('com_iddestino', $producto);
        return $this->db->get($this->_table['comentario']);
    }
    
    function get_info_usuario($producto = '', $empresa = ''){
        if($empresa != ''){
            $this->db->where('pro_empresa', $this->session->userdata('empresa'));
        }
        $this->db->where('pro_idproducto', $producto);
        $query = $this->db->get($this->_table['producto']);
        if($query->num_rows() > 0){
            $row = $query->row_array();
            $this->db->where('usu_idusuario', $row['pro_idusuario']);
            return $this->db->get($this->_table['usuario']);
        }
        return null;
    }
    
    function get_productos_usuario($usuario = null, $producto = null){
        $this->db->from($this->_table['producto']);
        $this->db->join($this->_table['zon_municipio'], 'mun_idmunicipio = pro_municipio');
        $this->db->where('pro_idusuario', $usuario);
        $this->db->where('pro_idproducto !=', $producto);
        $this->db->order_by('RAND()');
        $this->db->limit(4, 0);
        return $this->db->get();
    }
    
    function get_suma_tarifas($producto = null){
        $fechades = $this->general->fec_str_to_ymd($this->session->userdata('p_datefrom'));
        $fechahas = $this->general->fec_str_to_ymd($this->session->userdata('p_dateto'));
        $this->db->select_sum('tar_importe');
        $this->db->from($this->_table['tarifa']);
        $this->db->where('tar_idproducto', $producto);
        $this->db->where("tar_fecha between date_format(".$fechades.", '%Y%m%d')+1 AND date_format(".$fechahas.", '%Y%m%d')");
        $query = $this->db->get();
        if($query->num_rows() > 0){
            $row = $query->row_array();
            return $row['tar_importe'];
        }
    }
}